package com.zsrt.day20170505.btree;
/**
*@author jzh
*@创建时间 2017年5月5日下午5:54:01
*类说明：
*/
public class BTree {
	
	Node root;
	/**
	 * 初始化根节点
	 * @param node
	 */
	public BTree(Node node){
		this.root=node;
	}
	/**
	 * 增加一个节点
	 * @param parentNode	参照节点
	 * @param addNode		要增加的节点
	 */
	public void add(Node parentNode,Node addNode){
		Node p=parentNode;
		
		if(addNode.getData()<p.getData()){
			if(p.getLeftChild()==null){
				//如果没有左子节点，直接把addNode赋值给左子节点
				p.setLeftChild(addNode);
			}else{
				//如果有左子节点，递归调用方法本身
				this.add(p.getLeftChild(), addNode);
			}
		}else{
			if(p.getRightChild()==null){
				p.setRightChild(addNode);
			}else{
				this.add(p.getRightChild(), addNode);
			}
		}
	}
	/**
	 * 二叉排序树，最右边的就是最大的
	 * @return	返回最右边的节点
	 */
	public Node findMax(){
		Node p=this.root;
		
		while(p.getRightChild()!=null){
			p=p.getRightChild();
		}
		return p;
	}
	
	public Node findMin(){
		Node p=this.root;
		while(p.getLeftChild()!=null){
			p=p.getLeftChild();
		}
		return p;
	}
	/**
	 * 递归实现二叉树的前序遍历
	 * @param perentNode
	 */
	public void preOrder(Node perentNode){
		
		if(perentNode!=null){
			System.out.print(perentNode.getData()+" ");
			this.preOrder(perentNode.getLeftChild());
			this.preOrder(perentNode.getRightChild());
		}
	}
	/**
	 * 递归实现二叉树的中序遍历
	 * @param perentNode
	 */
	public void midOrder(Node perentNode){
		
		if(perentNode!=null){
			this.midOrder(perentNode.getLeftChild());
			System.out.print(perentNode.getData()+" ");
			this.midOrder(perentNode.getRightChild());
		}
		
	}
	
	public void postOrder(Node perentNode){
		if(perentNode!=null){
			this.postOrder(perentNode.getLeftChild());
			this.postOrder(perentNode.getRightChild());
			System.out.print(perentNode.getData()+" ");
		}
	}
	
	

}
